index.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { useParams } from 'common'
  2. import { useRouter } from 'next/router'
  3. import { useEffect } from 'react'
  4. import DefaultLayout from '@/components/layouts/DefaultLayout'
  5. import { EditorBaseLayout } from '@/components/layouts/editors/EditorBaseLayout'
  6. import SQLEditorLayout from '@/components/layouts/SQLEditorLayout/SQLEditorLayout'
  7. import { SQLEditorMenu } from '@/components/layouts/SQLEditorLayout/SQLEditorMenu'
  8. import { useDashboardHistory } from '@/hooks/misc/useDashboardHistory'
  9. import { useTabsStateSnapshot } from '@/state/tabs'
  10. import type { NextPageWithLayout } from '@/types'
  11. const SQLEditorIndexPage: NextPageWithLayout = () => {
  12. const router = useRouter()
  13. const { ref: projectRef } = useParams()
  14. const store = useTabsStateSnapshot()
  15. const { history, isHistoryLoaded } = useDashboardHistory()
  16. useEffect(() => {
  17. if (isHistoryLoaded) {
  18. // Handle redirect to last opened snippet tab, or last snippet tab
  19. const lastOpenedTab = history.sql
  20. const lastTabId = store.openTabs.find((id) => store.tabsMap[id]?.type === 'sql')
  21. if (lastOpenedTab !== undefined) {
  22. router.replace(`/project/${projectRef}/sql/${history.sql}`)
  23. } else if (lastTabId) {
  24. const lastTab = store.tabsMap[lastTabId]
  25. if (lastTab) {
  26. router.replace(`/project/${projectRef}/sql/${lastTab.id.replace('sql-', '')}`)
  27. }
  28. } else {
  29. router.replace(`/project/${projectRef}/sql/new`)
  30. }
  31. }
  32. // eslint-disable-next-line react-hooks/exhaustive-deps
  33. }, [isHistoryLoaded])
  34. return null
  35. }
  36. SQLEditorIndexPage.getLayout = (page) => (
  37. <DefaultLayout>
  38. <EditorBaseLayout productMenu={<SQLEditorMenu />} product="SQL Editor">
  39. <SQLEditorLayout>{page}</SQLEditorLayout>
  40. </EditorBaseLayout>
  41. </DefaultLayout>
  42. )
  43. export default SQLEditorIndexPage